/////////////////////////////////////////////////////////////////////////
//
// Amuse Engine
// Copyright (c) 2015.  All Rights Reserved
//
// File:		AEApplication.h
// Author:		Gianluca Belardelli
// Date:		27/09/2013
//
/////////////////////////////////////////////////////////////////////////
#ifndef _AEAPPLICATION_H_
#define _AEAPPLICATION_H_

class AE_DLLIMPEXP AEApplication
{
// Methods
protected:
    /**
     * Initialize callback that is called just before the first frame when the game starts.
     */
    virtual void onInitialize( void ) = 0;

    /**
     * Finalize callback that is called when the game on exits.
     */
    virtual void onFinalize( void ) = 0;

    /**
     * Update callback for handling update routines.
     *
     * Called just before render, once per frame when game is running.
     * Ideal for non-render code and game logic such as input and animation.
     *
     * @param elapsedTime The elapsed game time.
     */
    virtual void onUpdateScene( float fElapsedTime ) = 0;

    /**
     * Render callback for handling rendering routines.
     *
     * Called just after update, once per frame when game is running.
     * Ideal for all rendering code.
     *
     * @param elapsedTime The elapsed game time.
     */
    virtual void onRenderScene( float fElapsedTime ) = 0;

	virtual void onFinishScene( float fElapsedTime ) = 0;

public:
	void SetCursorVisible( bool bVisible );
	bool IsCursorVisible( void );
	
	bool Run( void );
	bool Pause( void );
	bool Resume( void );
	AEUINT32 Exit( AEUINT32 ulExitCode = 0 );
};

#endif // _AEAPPLICATION_H_
